package com.shop.cereshop.commons.tencent.moderation.util;

import com.tencentcloudapi.common.exception.TencentCloudSDKException;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 * @description: 腾讯SDK错误信息处理工具类
 * @author zdd
 * @date 2025/10/30 10:16
 * @version 1.0
 */
public class ErrorMessageUtils {

    /**
     * 获取友好的错误信息
     */
    private static final Map<String, String> ERROR_MESSAGE_MAP;

    static {
        Map<String, String> map = new HashMap<>();
        map.put("InvalidParameter", "请求参数错误，请检查输入参数格式是否正确");
        map.put("RequestLimitExceeded", "请求频率过高，请稍后重试");
        map.put("OperationDenied", "操作被拒绝，请检查账号权限");
        map.put("UnauthorizedOperation.Unauthorized", "未开通权限或账号欠费，请联系管理员处理");
        map.put("ResourceUnavailable", "资源不可用，请确认服务状态");
        map.put("ResourcesSoldOut", "资源已售罄，请联系腾讯云客服扩容");
        map.put("LimitExceeded", "超过配额限制，请升级套餐或联系客服");
        map.put("MissingParameter", "缺少必要参数，请检查请求参数完整性");
        map.put("InternalError", "内部服务器错误，请稍后再试");
        map.put("ResourceInUse", "资源正在被使用，请稍后再试");
        map.put("ResourceInsufficient", "资源不足，请检查账户余额或配置");
        map.put("ResourceNotFound", "资源不存在，请确认任务ID或视频链接是否正确");
        map.put("UnknownParameter", "请求中包含未知参数，请检查接口文档");
        map.put("UnsupportedOperation", "当前操作不受支持，请确认接口版本或功能是否启用");
        map.put("DryRunOperation", "该请求为 DryRun 模式，实际不会执行操作");
        map.put("FailedOperation", "操作失败，请检查输入信息并重试");
        ERROR_MESSAGE_MAP = Collections.unmodifiableMap(map);
    }

    /**
     * 获取友好的错误信息
     */
    public static String getFriendlyErrorMessage(TencentCloudSDKException e) {
        String errorCode = e.getErrorCode();
        String message = e.getMessage();

        // 特殊处理 "InvalidParameterValue" 的 biztype not found 情况
        if ("InvalidParameterValue".equals(errorCode) && message.contains("biztype not found")) {
            return "业务类型(bizType)不存在，请在腾讯云控制台中创建对应的业务策略";
        }

        // 使用Map获取友好错误信息
        String friendlyMessage = ERROR_MESSAGE_MAP.get(errorCode);

        // 如果Map中没有对应的错误码，则返回默认的错误信息
        if (friendlyMessage == null) {
            return "视频审核服务异常：" + message;
        }

        return friendlyMessage + "：" + message;
    }




}
